home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / checkbox / registries / packages.py < prev    next >
Text File  |  2009-11-05  |  3KB  |  91 lines

  1. #
  2. # This file is part of Checkbox.
  3. #
  4. # Copyright 2008 Canonical Ltd.
  5. #
  6. # Checkbox is free software: you can redistribute it and/or modify
  7. # it under the terms of the GNU General Public License as published by
  8. # the Free Software Foundation, either version 3 of the License, or
  9. # (at your option) any later version.
  10. #
  11. # Checkbox is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. # GNU General Public License for more details.
  15. #
  16. # You should have received a copy of the GNU General Public License
  17. # along with Checkbox.  If not, see <http://www.gnu.org/licenses/>.
  18. #
  19. import os
  20.  
  21. from checkbox.lib.cache import cache
  22.  
  23. from checkbox.properties import String
  24. from checkbox.registry import Registry
  25. from checkbox.registries.command import CommandRegistry
  26. from checkbox.registries.link import LinkRegistry
  27.  
  28.  
  29. COLUMNS = ["name", "version"]
  30.  
  31.  
  32. class PackageRegistry(Registry):
  33.  
  34.     def __init__(self, package):
  35.         super(PackageRegistry, self).__init__()
  36.         self._package = package
  37.  
  38.     def __str__(self):
  39.         strings = ["%s: %s" % (k, v) for k, v in self._package.items()]
  40.  
  41.         return "\n".join(strings)
  42.  
  43.     def items(self):
  44.         items = [(k, v) for k, v in self._package.items()]
  45.         items.append(("package", LinkRegistry(self)))
  46.  
  47.         return items
  48.  
  49.  
  50. class PackagesRegistry(CommandRegistry):
  51.     """Registry for packages."""
  52.  
  53.     # Command to retrieve packages.
  54.     command = String(default="COLUMNS=200 dpkg -l")
  55.  
  56.     @cache
  57.     def items(self):
  58.         items = []
  59.  
  60.         aliases = {
  61.             "linux-image-" + os.uname()[2]: "linux"}
  62.  
  63.         for line in [l for l in self.split("\n") if l]:
  64.             # Determine the lengths of dpkg columns and
  65.             # strip status column.
  66.             if line.startswith("+++"):
  67.                 lengths = [len(i) for i in line.split("-")]
  68.                 lengths[0] += 1
  69.                 for i in range(1, len(lengths)):
  70.                     lengths[i] += lengths[i - 1] + 1
  71.  
  72.             # Parse information from installed packages.
  73.             if line.startswith("ii"):
  74.                 package = {}
  75.                 for i in range(len(COLUMNS)):
  76.                     key = COLUMNS[i]
  77.                     value = line[lengths[i]:lengths[i+1]-1].strip()
  78.                     package[key] = value
  79.  
  80.                 key = package["name"]
  81.                 if key in aliases:
  82.                     package["alias"] = aliases[key]
  83.  
  84.                 value = PackageRegistry(package)
  85.                 items.append((key, value))
  86.  
  87.         return items
  88.  
  89.  
  90. factory = PackagesRegistry
  91.